#ifndef MODEL_H
#define MODEL_H

#include<vector>

//游戏类型，双人orAI(目前固定让AI下白子)
enum GameType
{
    MAN,  //双人模式
    AI   //人机对弈
};

//游戏状态
enum GameStatus
{
    PLAYING,  //游戏中
    WIN,
    LOSE
};

//棋盘尺寸
const int BOARD_GRAD_SIZE=15;

const int MARGIN=30;  //棋盘边缘的空隙
const int CHSS_RADIUS=15;  //棋子半径
const int MARK_SIZE=6;  //落子标记边长
const int BLOCK_SIZE=40;  //格子大小
const int POS_OFFET=BLOCK_SIZE*0.4;  //鼠标点击的模糊距离上限

const int AI_THINK_TIME=700;  //AI下棋的思考时间

class GameModel
{
public:
    GameModel(){};
public:
    //存储当前游戏棋盘和棋子的情况，空白为0，黑子1，白子-1
    std::vector<std::vector<int>>gameMapVec;

    //存储各个点位的评分情况，作为AI下棋依据
    std::vector<std::vector<int>>scoreMapVec;

    //标示下棋方，true：黑棋方   false:AI 白棋方
    bool playerFlag;

    GameType gameType; //选择游戏模式

    GameStatus gamestatus; //游戏状态

    void actionByPerson(int row,int col);
    void updateGameMap(int row,int col);

    void startGame(GameType type); //开始游戏
    void calculateScore(); //计算评分
    void acionByPerson(int row,int col); //人执行下棋
    void actionByAI(int &clickRow,int &clickCol); //AI执行下棋
    void updateGamMap(int row,int col); //每次落子后更新棋盘
    bool isWin(int row,int col); //判断游戏是否胜利
    bool isDeadGame(); //判断是否和棋
};

#endif   // MODEL_H
